#include"CCL_test.h"
#include "../functions.h"

/**
 * compare the time between cpu and gpu algorithms
 * @param img
 * @param width integer that represents the width of the image
 * @param height integer that represents the height of the image
 * @param dims
 * @param umbral
 * @param pixelsPerThread integer that represents how match pixels a thread has to work with
 */
void compareCCL(uchar4* img, int width, int height, cudaDeviceProp deviceProp, int pixelsPerThread, int umbral){
	struct timeval tiGPU, tfGPU,tiCPU, tfCPU;
	double tiempoGPU,tiempoCPU;
	int* h_img=NULL;
	int* h_img2=NULL;

	gettimeofday(&tiGPU, NULL);
	h_img=CCL_gpu(img, width, height, deviceProp, pixelsPerThread, umbral);
	gettimeofday(&tfGPU, NULL);

	tiempoGPU= (tfGPU.tv_sec - tiGPU.tv_sec)*1000 + (tfGPU.tv_usec - tiGPU.tv_usec)/1000.0;
	cout << " * GPU --"
					<< "Ha tardado: "<<tiempoGPU<< " milisegundos\n"<< endl;

	gettimeofday(&tiCPU, NULL);
	h_img2=CCL_cpu(img, width, height, umbral);
	gettimeofday(&tfCPU, NULL);


	tiempoCPU= (tfCPU.tv_sec - tiCPU.tv_sec)*1000 + (tfCPU.tv_usec - tiCPU.tv_usec)/1000.0;

	cout << " * CPU --"
				<< "Ha tardado: "<<tiempoCPU<< " milisegundos\n"<< endl;

	cout <<  " la GPU fue " << tiempoCPU/tiempoGPU << " veces mas rapida" << endl;
	//cout << "cpu tardo: " <<tiempoCPU/1000 << endl;
	bool h=compare(h_img,h_img2,width,height);
	if(h){
			cout<<"son iguales"<<endl;
	}
	else{
		cout<<"no son iguales"<<endl;
	}
	if(width == 8192){
		//toImage("CCL_CPU.ppm", h_img2,width,height);
		toImage("CCL_GPU.ppm", h_img,width,height);
	}
	cudaFreeHost(h_img);
//	free(h_img2);
}
